---
title: "Oficina GECAT de Análise de Correlação e Correspondencia"
author: "Vanessa, Lauren e Patrícia."
date: "10/07/2023"
output:
  slidy_presentation: default
  ioslides_presentation: default
  beamer_presentation: default
---

# ANÁLISE DE CORRELAÇÃO

**O que é Correlação?**

É uma medida estatística que descreve a relação entre duas variáveis, indicando como as mudanças em uma variável estão relacionadas às mudanças em outra variável.

Frequentemente é usada para determinar se existe uma relação linear e qual é a força dessa relação entre duas variáveis.

Ela pode variar de -1 a 1, sendo os extremos indicativos de uma correlação perfeita negativa e positiva, respectivamente.

![](Correlação%20KAM.png)

```         
Positiva: ambas as variáveis aumentam ou diminuem juntas de maneira proporcional. 
Negativa: uma variável aumenta enquanto a outra diminui de maneira proporcional. 
Zero ou próxima de zero: sem relação linear aparente. 
```

## Diferenças de Matriz de Correlação de Pearson e Spearman?

A matriz de correlação de Pearson e de Spearman são usadas para analisar a relação entre múltiplas variáveis.

Ambas as matrizes fornecem uma visão geral das associações entre as variáveis, mas diferem na forma como calculam e interpretam as correlações.

**Matriz de Correlação de Pearson:** adequada para dados quantitativos ou contínuos que seguem uma distribuição aproximadamente normal.É mais sensível a relações lineares e pode ser influenciada por valores extremos.

**Matriz de Correlação de Spearman:** adequada para dados ordinais ou dados não paramétricos, nos quais a relação não é necessariamente linear.Ela é menos sensível a valores extremos e não requer que os dados sigam uma distribuição específica.

A escolha entre a matriz de correlação de Pearson e a de Spearman depende do tipo de dados, da natureza da relação que se espera encontrar e das suposições que se podem fazer sobre os dados.

É importante considerar o contexto e os objetivos da análise ao escolher a matriz de correlação apropriada.

## Quais tipos de problemas elas nos ajudam a responder?

A correlação pode ajudar a responder a uma variedade de problemas e perguntas relacionadas à relação (associação/força) entre variáveis.

```         
Exemplos: 

a) identificar associações entre variáveis (positiva ou negativa); 

b) avaliar a força da relação (valores próximos a 1 indicam correlação forte, enquanto valores próximos a 0 indicam correlação fraca); 

c) identificar variáveis relevantes (quais variáveis estão mais fortemente relacionadas entre si); 

d) detectar multicolinearidade; 

e) planejar análises adicionais (isso pode incluir a criação de gráficos de dispersão, análises de regressão mais detalhadas ou investigações adicionais sobre a natureza da relação).
```

## Quais as limitações?

*Limitação à relação linear:* a matriz de correlação mede apenas a relação (associação) linear entre as variáveis.

*Sensibilidade a valores extremos:* a matriz de correlação de Pearson é sensível a valores extremos (outliers) que podem distorcer a relação entre as variáveis.

*Restrição a relações monotônicas:* a matriz de correlação de Spearman, embora mais flexível que a de Pearson, ainda é limitada a detectar apenas relações monotônicas.

*Influência de amostras pequenas:* em amostras pequenas, a matriz de correlação pode ter uma estimativa menos precisa da verdadeira correlação entre as variáveis.

*Causalidade não implicada:* a correlação não implica causalidade.

*Restrição a variáveis quantitativas:* a matriz de correlação é mais comumente usada para analisar variáveis quantitativas contínuas.

[*Ela não é adequada para variáveis categóricas ou ordinais sem uma escala numérica clara.*]{.underline}

## Como operacionalizar no R?

### Instalar e carregar pacotes

```{r pacotes, echo=TRUE, message=FALSE, warning=FALSE, paged.print=FALSE}
pacotes <- c("AER","base", "basictabler", "bibtex","BiocManager", "bookdown","caper", "car","caret", "conflicted","correlation","corrplot","cowplot","DescTools","distill","dplyr","encrptr","factoextra","FactoMineR", "faraway","fastDummies","flextable","foreign","gdata", "ggrepel","ggtree",     "ggplot2","ggpubr","graphics", "grid","gridExtra","gtsummary","Hmisc","httr2","jsmodule", "jtools","knitr","kableExtra","knitLatex","lmtest", "lubridate","magick","margins", "marginaleffects", "MASS", "MatchIt","mfx","mgcv","minqa","modelr" ,"mgcv","nnet","nortest","OddsPlotty","papaja", "pandoc","palmerpenguins","performance", "pglm","plm","plotly","plotly", "pROC","pscl","psych","rddtools","readr", "regclass","rJava", "readxl","RefManageR", "remotes", "reshape2", "repos", "report","ReporteRs","reshape2","rgl","rlang","rmarkdown","Rmisc","ROCR","RSelenium", "scales","sjlabelled", "stargazer","stats","stringr", "stringi","texreg","tidyr","tidyverse", "tinytex","tseries","truncnorm", "visreg","viridis", "xfun","xlsx","xtable","wesanderson", "writexl","vdr")
```

```{r instalando, echo=TRUE, message=FALSE, warning=FALSE, paged.print=FALSE}
options(repos = "https://cran.rstudio.com/")
if(sum(as.numeric(!pacotes %in% installed.packages())) != 0){
  instalador <- pacotes[!pacotes %in% installed.packages()]
  for(i in 1:length(instalador)) {
    install.packages(instalador, dependencies = T)
    break()}
  sapply(pacotes, require, character = T)
} else {
  sapply(pacotes, require, character = T)
}
```

### Importar base de dados

Duas possibilidades:

-   Importar o "R Workspace"

    -   formato .RData
    -   Item do Environment "pastinha"
    -   Comando

```{r abrir base, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
load("C:/Users/Usuário/OneDrive/Oficina Correlação e Correspondência/Base oficina correlacao_GECAT.RData")
```

### Correlação

#### Montar base para correlação só com as variáveis que quero

```{r base para correlação, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
Base_Correlacao <- Base_GECAT_Correlacao %>%
  dplyr::select("DA_w1", "DA.abs_w1", "SP", "Rest",
                "ACCY_w1", "POST", "Emerg", "SIZE_w1", "ROA_w1",
                "LEVER_w1", "BTM_w1","CFO_w1", "AU", "AC", "Law", "COV") %>%
  na.omit(Base_Correlacao) 

view(Base_Correlacao)
```

#### Construir função

```{r função de correlação, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
corstars <-function(x, method=c("pearson", "spearman"), removeTriangle=c("upper", "lower"),
                     result=c("none", "html", "latex")){
    #Compute correlation matrix
    require(Hmisc)
    x <- as.matrix(x)
    correlation_matrix<-rcorr(x, type=method[1])
    R <- correlation_matrix$r # Matrix of correlation coeficients
    p <- correlation_matrix$P # Matrix of p-value 
    
    ## Define notions for significance levels; spacing is important.
    mystars <- ifelse(p < .0001, "****", ifelse(p < .001, "*** ", ifelse(p < .01, "**  ", ifelse(p < .05, "*   ", "    "))))
    
    ## trunctuate the correlation matrix to two decimal
    R <- format(round(cbind(rep(-1.11, ncol(x)), R), 2))[,-1]
    
    ## build a new matrix that includes the correlations with their apropriate stars
    Rnew <- matrix(paste(R, mystars, sep=""), ncol=ncol(x))
    diag(Rnew) <- paste(diag(R), " ", sep="")
    rownames(Rnew) <- colnames(x)
    colnames(Rnew) <- paste(colnames(x), "", sep="")
    
    ## remove upper triangle of correlation matrix
    if(removeTriangle[1]=="upper"){
      Rnew <- as.matrix(Rnew)
      Rnew[upper.tri(Rnew, diag = TRUE)] <- ""
      Rnew <- as.data.frame(Rnew)
    }
    
    ## remove lower triangle of correlation matrix
    else if(removeTriangle[1]=="lower"){
      Rnew <- as.matrix(Rnew)
      Rnew[lower.tri(Rnew, diag = TRUE)] <- ""
      Rnew <- as.data.frame(Rnew)
    }
    
    ## remove last column and return the correlation matrix
    Rnew <- cbind(Rnew[1:length(Rnew)-1])
    if (result[1]=="none") return(Rnew)
    else{
      if(result[1]=="html") print(xtable(Rnew), type="html")
      else print(xtable(Rnew), type="latex") 
    }
} 
```

#### Gerar tabelas

```{r gerar output excel, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
library(Hmisc)
library(xtable)

Matriz_Correlacao_Pearson <- corstars(Base_Correlacao,
                                      method = c("pearson"),
                                      removeTriangle = c("upper"),
                                      result = c("none", "html", "latex"))

Matriz_Correlacao_Spearman <- corstars(Base_Correlacao,
                                       method = c("spearman"),
                                       removeTriangle = c("lower"),
                                       result = c("none", "html", "latex"))


library(writexl)
write_xlsx(Matriz_Correlacao_Pearson,"C:/Users/Usuário/OneDrive/Oficina Correlação e Correspondência/Corr_pearson.xlsx")
write_xlsx(Matriz_Correlacao_Spearman, "C:/Users/Usuário/OneDrive/Oficina Correlação e Correspondência/Corr_spearman.xlsx")
```

### Como interpretar?

A interpretação de uma matriz de correlação em termos práticos depende do contexto e das variáveis envolvidas.

No entanto, existem algumas considerações gerais que são: direção da correlação: pode ser positiva ou negativa.

força da correlação: varia de -1 a +1.

Quanto mais próximo de -1 ou +1, mais forte é a correlação.

Um valor próximo de zero indica uma correlação fraca ou inexistente.

Importância prática: é necessário levar em conta o contexto da análise e o impacto real das variáveis relacionadas.

```         
Uma correlação estatisticamente significativa pode não ser necessariamente importante em termos práticos.
```

Outliers: valores extremos (outliers) podem afetar a correlação e distorcer a interpretação.

```         
Verificar a presença de outliers é fundamental para uma correta análise.
```

Lmitações: restrição à relação linear e a falta de causalidade implícita.

```         
A correlação não implica necessariamente uma relação causal entre as variáveis, e outros fatores podem influenciar os resultados.
```

```{r print correlação Pearson, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
Matriz_Correlacao_Pearson
```

```{r print correlação Spearman, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
Matriz_Correlacao_Spearman
```

# ANÁLISE DE CORRESPONDÊNCIA

**O que é Análise de Correspondência?**

A análise de correspondência é uma técnica estatística de análise multivariada que permite *explorar e visualizar associações entre variáveis categóricas* em um conjunto de dados, facilitando a identificação de padrões e tendências nos dados.

A análise de correspondência múltipla (HOMALS) é uma técnica exploratória de interdependência cujo objetivo é investigar a relação entre variáveis qualitativas e permite ao pesquisador visualizar a associação entre um conjunto e variáveis categóricas e não métricas por meio de um mapa percentual que oferece uma noção de proximidade ou associação.

## Quais tipos de problemas elas nos ajudam a responder?

1.  Análise de preferências: onde se busca entender as associações entre as preferências dos indivíduos e as características dos produtos, serviços ou opções disponíveis

```         
análise de preferência do consumidor e estudos de comportamento de compra
```

2.  Segmentação de mercado: identificar segmentos ou grupos de consumidores com características semelhantes

```         
preferências e necessidades dos segmentos de mercado
```

3.  Análise de dados de pesquisa: pode ser aplicada a dados de pesquisa com perguntas de múltipla escolha

```         
identificar associações entre as respostas dos participantes e variáveis demográficas, como idade, gênero, nível de educação etc.
```

4.  Análise de dados textuais: análise de sentimentos em mídias sociais, análise de respostas abertas em pesquisas, análise de texto em documentos, entre outros

```         
associações entre palavras, tópicos ou temas nas respostas textuais
```

5.  Análise de associações em tabelas de contingência: células representam a frequência de ocorrência das combinações de categorias

```         
identificação de padrões de associação entre as categorias e a visualização dessas associações em gráficos de correspondência
```

## Quais as limitações?

1.  Restrita à análise de variáveis categóricas:

    é mais adequada para analisar variáveis categóricas, ou seja, aquelas que possuem categorias discretas e não contínuas.

2.  Sensibilidade à estrutura dos dados:

    a interpretação dos resultados da análise de correspondência pode variar dependendo da estrutura dos dados.

3.  Limitação à relação linear:

    assume uma relação linear entre as variáveis.

4.  Ausência de inferência causal:

    não permite fazer inferências causais sobre as relações entre as variáveis.

5.  Sensibilidade a dados faltantes:

    a presença de dados faltantes pode afetar a análise de correspondência.

6.  Limitações na análise de grandes tabelas de contingência:

    pode se tornar mais complexa e menos interpretável com muitas categorias e/ou muitas células com contagens baixas.Nesses casos, é recomendável considerar técnicas alternativas ou realizar agrupamentos prévios das categorias.

```         
Lembrando:   

a) a análise de correspondência informa as associações dos dados testados. Por isso, as distâncias entre gráficos derivados de dados diferentes não podem ser comparadas.  

b) o objetivo da análise de correspondência é comparar categorias. Existem alguns outros métodos estatísticos que ajudam a realizar a mesma tarefa ou uma tarefa semelhante, incluindo testes de qui quadrado, análise de componentes principais e análise fatorial.
```

## A análise de correspondência é calculada em etapas distintas:

***Preparação dos dados:*** os dados devem estar em formato de tabela de contingência, onde as linhas representam as categorias de uma variável e as colunas as categorias de outra variável (frequência de ocorrência de cada combinação de categorias entre as variáveis).

***Cálculo das proporções esperadas:*** com base na tabela de contingência, são calculadas as proporções esperadas para cada célula.

***Cálculo das proporções observadas:*** as proporções observadas são derivadas da tabela de contingência, dividindo-se o número de ocorrências em cada célula pelo total geral de observações.

***Análise de decomposição:*** serve para reduzir a dimensionalidade dos dados e representá-los em um espaço de menor dimensão.

***Plotagem do mapa de correspondência:*** com as coordenadas obtidas na etapa anterior, é possível produzir um gráfico chamado "mapa de correspondência" ou "mapa de preferências", que permite visualizar a proximidade ou a distância entre as categorias das variáveis em relação ao espaço reduzido.

-   As categorias que estão próximas no mapa têm uma associação mais forte, enquanto as categorias distantes estão menos associadas

## Como operacionalizar no R?

**Correspondência**

Criar uma base apenas com as variáveis categóricas

```{r criar variáveis para correspondencia, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
#Variáveis categóricas precisam estar como numéricas
Base_GECAT_Correlacao <- Base_GECAT_Correlacao %>%
  dplyr::mutate(LCS_factor = ifelse(LCS == "Birth", 1, 
                                    ifelse(LCS == "Growth", 2,
                                           ifelse(LCS == "Mature", 3,
                                                  ifelse(LCS == "ShakeOut", 4,
                                                         ifelse(LCS == "Decline", 5, NA))))), 
                DA_factor = ifelse(DA_w1 < 0, 1,
                                   ifelse(DA_w1 == 0, 2,
                                          ifelse(DA_w1 > 0, 3, NA))))
```

```{r criar variáeis para correspondencia_2, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
#Criando variáveis de abaixo e acima da medianda por setor e ano para Tempo de auditoria e ROA
Base_GECAT_Correlacao <- Base_GECAT_Correlacao %>%
  group_by(Sect_TRBC, Year) %>%
  dplyr::mutate(mAud_timeseta = median(Aud_time, na.rm=TRUE),
         Aud_time_median = factor(ifelse((Aud_time - mAud_timeseta) < 0, 1, 2)),
         mROAseta = median(ROA, na.rm=TRUE),
         ROA_median = factor(ifelse((ROA - mROAseta) < 0, 1, 2))) %>%
  ungroup()

Base_GECAT_Correlacao$Aud_time_median <- as.numeric(Base_GECAT_Correlacao$Aud_time_median)
Base_GECAT_Correlacao$ROA_median <- as.numeric(Base_GECAT_Correlacao$ROA_median)

Base_GECAT_Correlacao <- Base_GECAT_Correlacao %>%
  mutate_at(c("Aud_time_median"), ~replace(., is.na(.), 0)) %>%
  mutate_at(c("ROA_median"), ~replace(., is.na(.), 0))

Aud_time_median.tb <- table(Base_GECAT_Correlacao$Aud_time_median)
prop.table(Aud_time_median.tb)

ROA_median.tb <- table(Base_GECAT_Correlacao$ROA_median)
prop.table(ROA_median.tb)
```

### Análise de Correspondência Simples

Tabela de contingência. Pode ser feita de duas formas:

```{r}
# Função table()
tab <- table(Base_GECAT_Correlacao$Country,Base_GECAT_Correlacao$ROA_median)
tab

chi2 <- chisq.test(tab)
chi2
```

```{r}
# Função sjt.xtab() do pacote SjPlot
 install.packages("sjPlot")
 library(sjPlot)

tab2 <- sjt.xtab(var.row = Base_GECAT_Correlacao$Country,
                 var.col = Base_GECAT_Correlacao$ROA_median,
                 show.exp = TRUE, #Valores esperados de cada categoria
                 show.row.prc = TRUE, #Percentual dos valores em relação as linhas
                 show.col.prc = TRUE) #Percentual em relação as colunas
tab2
```

Mapa de calor que mostra os valores de resíduos padronizados ajustados positivos maiores que 1,96 (laranja)

```{r}
data.frame(chi2$stdres) %>%
  dplyr::rename(Country = 1, ROA_median = 2) %>%
  ggplot(aes(x = Country, 
             y = ROA_median, 
             fill = Freq, 
             label = round(Freq,3))) + geom_tile() + geom_text(size = 3, angle = 90) + scale_fill_gradient2(low = "darkorchid", mid = "white", high = "orange",  midpoint = 0) + labs(x = NULL, y = NULL) + theme(legend.title = element_blank(), panel.background = element_rect("white"), legend.position = "bottom", axis.text.x = element_text(angle = 90))
```

\*É verificado a existência de associação estatisticamente significativa entre as variáveis de país e ROA e identificado as relações de dependência entre as suas categorias (sempre que estiver em laranja).

Instalar e Carregar o pacote FactoMineR

```{r pacote para correspondencia, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
install.packages("FactoMineR")
library(FactoMineR)
```

```{r}
# Função CA do pacote anacor
ca_countryROA <- CA(tab)
```

### Análise de Correspondência Multipla

```{r criar base para correspondencia, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
Base_Correspondencia <- Base_GECAT_Correlacao %>%
  dplyr::select(DA_factor, SP, ROA_median, LCS_factor) %>%
  na.omit()
# Outras variáveis que poderia utilizar: Rest, POST, Emerg, AU, AC, Aud_time_median,Law
```

Executar a análise de correspondência

```{r print correlação comando para correspondencia, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
#Agora, você pode executar a análise de correspondência usando a função `CA()` do pacote "FactoMineR".
resultado_ca <- CA(Base_Correspondencia)
```

```{r}
ca_row_coords <- resultado_ca$row$coord
ca_col_coords <- resultado_ca$col$coord

resultado_ca_3D <- plot_ly()

#linhas
resultado_ca_3D <- add_trace(p = resultado_ca_3D,
                             x = ca_row_coords[,1],
                             y = ca_row_coords[,2],
                             z = ca_row_coords[,3],
                             mode = 'text',
                             text = rownames(ca_row_coords),
                             textfont = list(color = "orange"),
                             showlegend = FALSE)

#colunas
resultado_ca_3D <- add_trace(p = resultado_ca_3D,
                             x = ca_col_coords[,1],
                             y = ca_col_coords[,2],
                             z = ca_col_coords[,3],
                             mode = "text",
                             text = rownames(ca_col_coords),
                             textfont = list(color = "darkorchid"),
                             showlegend = FALSE)

resultado_ca_3D <- plotly::layout(p = resultado_ca_3D,
                                    scene = list(xaxis = list(title = colnames(ca_row_coords)[1]),
                                                 yaxis = list(title = colnames(ca_row_coords)[2]),
                                                 zaxis = list(title = colnames(ca_row_coords)[3]),
                                                 aspectmode = "data"))

resultado_ca_3D
```

Testando o gráfico 3D com a análise de correspondência simples

```{r}
ca_row_coords <- ca_countryROA$row$coord
ca_col_coords <- ca_countryROA$col$coord

ca_countryROA_3D <- plot_ly()

#linhas
ca_countryROA_3D <- add_trace(p = ca_countryROA_3D,
                             x = ca_row_coords[,1],
                             y = ca_row_coords[,2],
                             #z = ca_row_coords[,3],
                             mode = 'text',
                             text = rownames(ca_row_coords),
                             textfont = list(color = "orange"),
                             showlegend = FALSE)

#colunas
ca_countryROA_3D <- add_trace(p = ca_countryROA_3D,
                             x = ca_col_coords[,1],
                             y = ca_col_coords[,2],
                             #z = ca_col_coords[,3],
                             mode = "text",
                             text = rownames(ca_col_coords),
                             textfont = list(color = "darkorchid"),
                             showlegend = FALSE)

ca_countryROA_3D <- plotly::layout(p = ca_countryROA_3D,
                                    scene = list(xaxis = list(title = colnames(ca_row_coords)[1]),
                                                 yaxis = list(title = colnames(ca_row_coords)[2]),
                                                 zaxis = list(title = colnames(ca_row_coords)[3]),
                                                 aspectmode = "data"))

ca_countryROA_3D
```

### Qual a interpretação?

Compreensão das associações entre as categorias das variáveis analisadas.

Envolve a análise de proximidade entre as categorias, similaridade e força de padrões.

A proximidade entre os pontos indica a associação entre as categorias, onde as próximas estão mais fortemente associadas, enquanto categorias distantes estão menos associadas.

Análisando os resultados

```{r análise dos resultados, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
#Também é possível plotar gráficos para visualizar os resultados da análise de correspondência com o comando:
plot(resultado_ca)
```

```{r análise dos resultados, echo=TRUE, message=FALSE, warning=FALSE, , echo=TRUE, paged.print=FALSE}
#Resumo da análise usando o comando:
summary(resultado_ca)
```

Interpretação com gráfico 3D

![](graf.%20correspon.png)

# QUAL A DIFERENÇA ENTRE CORRELAÇÃO, CORRESPONDÊNCIA, CAUSALIDADE E ANÁLISE DE REGRESSÃO?

**Correlação:** medida da relação estatística entre duas variáveis, que varia de +1 a -1, e não pressupõe causalidade, mas sim força e direção da associação entre as variáveis.

**Correspondência:** pode ser usada para descrever a relação entre categorias ou características, mas geralmente não mede a força da associação de forma quantitativa, como a correlação (ex.: a correspondência entre a idade de uma pessoa e seu nível de educação).

**Causalidade:** relação de causa e efeito entre duas variáveis, onde uma variável influencia diretamente a outra. Para estabelecer a causalidade, geralmente são necessários experimentos controlados ou estudos observacionais mais sofisticados.

**Análise de regressão:** técnica estatística utilizada para modelar a relação entre uma variável dependente (variável de resposta) e uma ou mais variáveis independentes (variáveis explicativas).

# Referências

Benzécri, J. P. (1973). L'analyse des données. Dunod.

Corcoran, E. A., & Nelson, D. A. (1992). The relationships among locus of control, self-efficacy, and performance in a cognitive task. Personality and Individual Differences, 13(12), 1349-1352.

Field, A., Miles, J., & Field, Z. (2012). Discovering Statistics Using R. SAGE Publications.

Fisher, R. A. (1921). On the "probable error" of a coefficient of correlation deduced from a small sample. Metron, 1(3), 1-32.

Friedman, J. H. (2001). Greedy function approximation: A gradient boosting machine. Annals of Statistics, 29(5), 1189-1232.

Favero, L. P., Belfiore, P., Souza, R. F. (2023). Data Science, Analytics and Machine Learning with R. 1. ed. Elsevier.

Gifi, A. (1990). Nonlinear Multivariate Analysis. Wiley.

Greenacre, M. (2010). Biplots in Practice. Wiley.

Howell, D. C. (2012). Statistical Methods for Psychology (8th ed.). Cengage Learning.

Pearson, K. (1896). Mathematical contributions to the theory of evolution. XI: On the influence of natural selection on the variability and correlation of organs. Philosophical Transactions of the Royal Society of London. Series A, 187, 253-318.
